/******************************************************
Cours:   LOG121
Session: A2013
Groupe:  04
Projet: Laboratoire #4
Étudiant(e)s: Fredy Alexander Bonilla, Renaud Vincent, Simon Castro
                            
Professeur : Francis Cardinal
Nom du fichier: Modele.java
Date créé: 2013-11-22
Date dern. modif. 2013-11-26
*******************************************************
Historique des modifications
*******************************************************
*******************************************************/

import java.util.ArrayList;
import java.util.Observer;

/**
 * La classe Modele contient l'image et les diff�rentes perspectives de cette 
 * derniere. Elle sont stocke dans un arraylist.
 * 
 * @author Simon
 *
 */
public class Modele {
	
	/************
	 * Attributs
	 ************/
	
	private Image image;
	private ArrayList<Perspective> perspectives;
	
	/**
	 * Constructeur de la classe Modele qui instancie une nouvelle image et creer
	 * l'arraylist de perspectives
	 */
	public Modele(){
		this.image = new Image();
		this.perspectives = new ArrayList<Perspective>();
	}
	
	/**
	 * Accesseur de l'image
	 * 
	 * @return l'image
	 */
	public Image getImage(){
		return this.image.getImage();
	}
	
	/**
	 * Mutateur de l'image
	 * @param i
	 */
	public void setImage(Image i) {
		this.image = i;
	}
	/**
	 * Cette methode re�oit une reference a un element de la vue.
	 * Un nouvel objet de type Perspective est creer, on lui ajoute son observateur
	 * et on ajoute la perspective a la liste de perspectives du modele
	 * @param o, un objet observateur a ajouter aux observateurs de 
	 * la nouvelle perspective
	 */
	public void creerPerspective(Observer o, int largeur, int hauteur, int index){
		
		// creation d'une nouvelle perspective, on lui passe une reference a l'Image
		Perspective p = new Perspective(this.getImage(), largeur, hauteur, index);
		// ajout de l'observateur de cette perspective
		p.addObserver(o);
		// ajout a la liste de perspectives du modele
		this.perspectives.add(p);
		
	}
	
	/**
	 * Methode retournant la perspective a l'indice donnee.
	 * 
	 * @param indice
	 * @return la perspective a l'indice recu en parametre
	 */
	public Perspective getPerspectiveAt(int indice){
		return this.perspectives.get(indice);
	}
	
}
